NumPy

문제1.

NumPy 명령을 사용하여 다음 행렬을 생성하는 코드를 1줄로 작성하세요.


In [2]:
X = np.array([[11, 12], [21, 22], [31, 32]])
X


Out[2]:
array([[11, 12],
       [21, 22],
       [31, 32]])

문제2.

X 행렬이 다음과 같을 때 NumPy 슬라이싱 인덱싱을 사용하여 행렬의 짝수 부분만을 선택하여 행렬로 만드는 NumPy코드를 작성하세요.(행렬 인덱싱을 사용하지 말 것!)


In [4]:
X = np.array([[1,1,1,1], [1,2,4,8], [1,3,5,7], [1,4,16,32], [1,5,9,13]])
X


Out[4]:
array([[ 1,  1,  1,  1],
       [ 1,  2,  4,  8],
       [ 1,  3,  5,  7],
       [ 1,  4, 16, 32],
       [ 1,  5,  9, 13]])

In [11]:
X[1::2, 1:]


Out[11]:
array([[ 2,  4,  8],
       [ 4, 16, 32]])

문제3.

X행렬이 다음과 같을 때 행렬 인덱싱을 사용하여 4의 배수만을 선택하여 하나의 벡터로 만드는 NumPy 코드를 작성하세요.(NumPy 슬라이싱 인덱싱을 사용하지 말 것!)


In [12]:
X = np.array([[1,1,1,1], [1,2,4,8], [1,3,5,7],[1,4,16,32],[1,5,9,13]])
X


Out[12]:
array([[ 1,  1,  1,  1],
       [ 1,  2,  4,  8],
       [ 1,  3,  5,  7],
       [ 1,  4, 16, 32],
       [ 1,  5,  9, 13]])

In [13]:
X[X%4==0]


Out[13]:
array([ 4,  8,  4, 16, 32])

문제4.

모든 원소의 값이 1인 (5,4)행렬 X와 모든 원소의 값이 0인 (5,4) 행렬 Y를 순서대로 합쳐서 크기가 (5,8)인 행렬을 만드는 NumPy코드를 3줄로 작성하세요.


In [16]:
X = np.ones((5,4))
Y = np.zeros((5,4))
np.hstack([X, Y])


Out[16]:
array([[ 1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.]])

문제 5.

arange명령과 reshape명령만을 사용하여 다음 행렬을 만드는 NumPy 코드를 1줄로 작성하세요.


In [17]:
np.arange(1,6)


Out[17]:
array([1, 2, 3, 4, 5])

In [22]:
np.arange(1,6).reshape(5,1)


Out[22]:
array([[1],
       [2],
       [3],
       [4],
       [5]])

문제6.

다음과 같이 x배열 변수가 존재하는 경우 이 x배열과 newaxis명령, 그리고 +연산만을 이용하여 다음 행렬을 만드는 코드를 1줄로 작성하세요.


In [23]:
x = np.arange(5)
x


Out[23]:
array([0, 1, 2, 3, 4])

In [24]:
x[:, np.newaxis] + 1


Out[24]:
array([[1],
       [2],
       [3],
       [4],
       [5]])

In [26]:
10 * (x[:, np.newaxis] + 1)


Out[26]:
array([[10],
       [20],
       [30],
       [40],
       [50]])

In [27]:
10 * (x[:, np.newaxis] + 1) + x


Out[27]:
array([[10, 11, 12, 13, 14],
       [20, 21, 22, 23, 24],
       [30, 31, 32, 33, 34],
       [40, 41, 42, 43, 44],
       [50, 51, 52, 53, 54]])

문제7.

다음 행렬 X가 5명의 학생이 3번 시험 본 성적이라고 가정하고 각 학생의 최고 성적을 구하는 코드를 1줄로 작성하세요.


In [28]:
np.random.seed(0)
X = np.random.random_integers(0, 100, (5,3))
X


C:\Anaconda3\lib\site-packages\ipykernel\__main__.py:2: DeprecationWarning: This function is deprecated. Please call randint(0, 100 + 1) instead
  from ipykernel import kernelapp as app
Out[28]:
array([[44, 47, 64],
       [67, 67,  9],
       [83, 21, 36],
       [87, 70, 88],
       [88, 12, 58]])

In [30]:
X.max(axis=1)


Out[30]:
array([64, 67, 83, 88, 88])

문제10

meshgrid명령과 scatter명령을 사용하여 다음 그림을 그리는 코드를 1줄로 작성하라.


In [31]:
plt.scatter(*np.meshgrid(range(5), range(6)));


선형대수

문제12.

다음 중 일반적으로 성립하지 않는 것을 모두 고르세요.

  • 2.det(cA) = c*det(A)

  • 6.det(A+B) = det(A) + det(B)

  • 9.tr(A)-1(역함수) = tr(A-1(역))


In [32]:
A = np.array([[1,2], [3,4]])
B = np.array([[5,6,], [7,8]])
print(np.linalg.det(3*A), 3*np.linalg.det(A)) #no.2
print(np.linalg.det(A+B), np.linalg.det(A) + np.linalg.det(B)) #no.6
print(np.trace(A), np.trace(np.linalg.inv(A))) #no.9


-18.0 -6.0
-8.0 -4.0
5 -2.5